
package com.ddlaw.util;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 常用工具类
 * 
 * @author YunLong
 */
public class ToolsUtil {
    
    private static Logger log = LoggerFactory.getLogger(ToolsUtil.class);
    
    /**
     * String转Integer
     * 
     * @param str
     * @return 返回Integer
     */
    public static Integer strToInt(String str) {
        Integer result = 0;
        try {
            result = Integer.parseInt(str);
        } catch (Exception ex) {
            log.error(ex.getMessage());
        }
        return result;
    }
    
    /**
     * String[]数组转List
     * 
     * @param str
     * @return 返回List
     */
    public static List<String> strToList(String str) {
        List<String> list = new ArrayList<String>();
        if(str.indexOf(",") > 0){
            String[] dates = str.split(",");
            list = Arrays.asList(dates);
        }                
        return list;
    }
    
    /**
     * String转char
     * 
     * @param str
     * @return 返回char值
     */
    public static char strToChar(String str) {
        int tmp = strToInt(str);
        return (char) (tmp + '0');
    }
    
    /**
     * double转int
     * 
     * @param dou
     * @return 返回int值
     */
    public static int doubleToInt(double dou) {
        int result = 0;
        try {
            result = (int) dou;
        } catch (Exception ex) {
            log.error(ex.getMessage());
        }
        return result;
    }
    
    /**
     * 日期转格式化字符串
     * 
     * @param date
     *            日期
     * @param formate
     *            格式字符串
     * @return 格式化后日期
     * @throws ParseException 
     */
    public static String dateFormate(Date date, String formate) { 
        try{
            if (date == null) {
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                date = format.parse("1970-01-01 00:00:00");
            }              
        }catch(ParseException pex){
            log.error(pex.getMessage());
        }
        DateFormat dateFormat = new SimpleDateFormat(formate);
        return dateFormat.format(date); 
    }
    
    /**
     * 日期转格式化字符串(yyyy-MM-dd)
     * 
     * @param date
     *            日期
     * @return 格式化后日期"yyyy-MM-dd"
     */
    public static String dateFormate(Date date) {
        return dateFormate(date, "yyyy-MM-dd");
    }
    
    /**
     * 日期转格式化字符串(yyyy/MM/dd)
     * 
     * @param date
     *            日期
     * @return 格式化后日期"yyyy/MM/dd"
     */
    public static String dateFormateSlash(Date date) {
        return dateFormate(date, "yyyy/MM/dd");
    }
    
    /**
     * 日期转格式化字符串(yyyy/MM/dd HH:mm)
     * 
     * @param date
     *            日期
     * @return 格式化后日期"yyyy/MM/dd HH:mm"
     */
    public static String dateTimeFormateSlash(Date date) {
        return dateFormate(date, "yyyy/MM/dd HH:mm");
    }
    
    /**
     * 日期转格式化字符串(yyyy/MM/dd HH:mm:ss)
     * 
     * @param date
     *            日期
     * @return 格式化后日期"yyyy/MM/dd HH:mm:ss"
     */
    public static String dateTimeFormateSlashSecond(Date date) {
        return dateFormate(date, "yyyy/MM/dd HH:mm:ss");
    }
    
    /**
     * 日期转格式化字符串(MM/dd HH:mm)
     * 
     * @param date
     *            日期
     * @return 格式化后日期"MM/dd HH:mm"
     */
    public static String dateTimeFormateSlashNoYear(Date date) {
        return dateFormate(date, "MM/dd HH:mm");
    }
    
    /**
     * 日期转时间格式化字符串(HH:mm)
     * 
     * @param date
     *            日期
     * @return 格式化后时间"HH:mm"
     */
    public static String timeFormate(Date date) {
        return dateFormate(date, "HH:mm");
    }
    
    /**
     * 提取日期
     * 
     * @param date
     *            日期
     * @return  day 天
     */
    public static int timeFormateDay(Date date) {
    	String s = dateFormate(date, "dd");
    	int day=0;
    	if(s.charAt(0)=='0'){
			 day = Integer.valueOf(s.charAt(1)+"");
		}else{
			 day = Integer.valueOf(s);
		}
        return day;
    }
    
    /**
     * 字符串转布尔值
     * 
     * @param str
     *            "1"是true,其他是false
     * @return 转换后的布尔值
     */
    public static Boolean strToBool(String str) {
        if ("1".equals(str)) {
            return true;
        } else {
            return false;
        }
    }   
    
    /**
     * 字符串转整型数组
     * 
     * @param str 字符串
     * @return 返回整型数组
     */
    public static Integer[] strToIntArray(String str){
        Integer[] ints = null;
        if(str.indexOf(",") > 0){
            String[] dates = str.split(",");
            ints = new Integer[dates.length];
            for(int i = 0; i < dates.length; i++){
                ints[i] = strToInt(dates[i]);
            }
        } 
        return ints;
    }
    
    /**
     * 保留小数点后两位
     * @param var  传入的双整型
     * @return 返回处理结果
     */
    public static BigDecimal keepTwoDecimal(BigDecimal var){
        BigDecimal result = new BigDecimal(0.00);
        if(var != null){
            result = var.setScale(2,BigDecimal.ROUND_HALF_UP);
        }
        return result;
    }
}
